package com.cy.goods.dao;

import com.cy.pj.goods.pojo.Goods;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;
@Repository
public class GoodsDaoImpl implements GoodsDao{
    @Autowired
    private SqlSession sqlSession;
    @Override
    public List<Goods> findGoods() {
        //mybatis 数据访问实现
        String namespace=this.getClass().getInterfaces()[0].getName();
        System.out.println(namespace);
        //String elementId="findGoods";
        //Thread.currentThread().getStackTrace();// 获取当前线程中的方法栈信息
        // (每个线程都有一个私有的方法栈)
        //每个调用方法的相关信息会以StackTrace(栈帧-方法名,参数,返回值)的形式进入栈内存
        //方法调用时会执行入栈操作,方法执行结束会执行出栈操作

        String elementId=Thread.currentThread().getStackTrace()[1].getMethodName();
        String statement=namespace+"."+elementId;
      //String statement="com.cy.goods.dao.GoodsDao.findGoods";
        //映射的namespace+elementId
        List<Goods> list = sqlSession.selectList(statement);
        //在通过sqlSession执行会话时,会基于statement(key)从Map<String,MappedStatement>中
        //查找对应的MappedStatement对象,然后基于MappedStatement对象封装的sql信息执行语句
        return list;
    }
}
